package com.cskaoyan.javase._2inner._5anonymous._3exercise;

/**
 * 不修改main方法和接口Inter的前提下，
 * 补齐Outer类代码，要求在控制台输出HelloWorld
 *
 * @since 14:40
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Test {
    public static void main(String[] args) {
        /*
            分析：
            Outer.method() 说明方法method是一个无参的，静态的方法
            并且Outer.method() 后面能够继续链式调用show方法,而show方法是接口Inter当中的抽象方法
            说明:
                Outer.method()的方法返回一个接口Inter的子类对象
            于是method方法的方法头就可以写出来了

            并且show方法的实现是要打印"hello world!"
         */
        Outer.method().show();
    }
}

@FunctionalInterface
interface Inter {
    void show();
}

// 老办法,手写实现类
class InterImpl implements Inter {
    @Override
    public void show() {
        System.out.println("hello world!");
    }
}

class Outer {
    public static Inter method() {
        // return new InterImpl();
        // 使用局部内部类
        /*class InterImpl implements Inter {
            @Override
            public void show() {
                System.out.println("hello world! 局部内部类的实现");
            }
        }
        return new InterImpl();*/

        // 使用匿名内部类对象,作为方法的返回值
        // Anonymous new Inter() can be replaced with lambda
        return new Inter() {
            @Override
            public void show() {
                System.out.println("hello world! 匿名内部类的实现");
            }
        };
    }
}
